#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
	int res=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){res=(res<<1)+(res<<3)+(c^48);c=getchar();}
	return res*f;
}
void write(int x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
int n,m;
int c[114514],t[114514],w[114514];
int T[114514],W[114514];
int cnt;
int f[114514];
int ans;
void dfs(int s,int nt,int nw)
{
	if(nt>m) return;
	if(s>n)
	{
		ans=max(ans,nw);
		return;	
	}
	for(int i=0;i<=c[s];i++) dfs(s+1,nt+i*t[s],nw+i*w[s]);
}
signed main()
{
	freopen("book.in","r",stdin);
	freopen("book.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++) c[i]=read();
	for(int i=1;i<=n;i++) t[i]=read();
	for(int i=1;i<=n;i++) w[i]=read();
	m=read();
	if(m>10000)
	{
		dfs(1,0,0);
		write(ans);
		return 0;
	}
	for(int i=1;i<=n;i++)
	{
		int p=1;
		while(p<=c[i]) 
		{
			T[++cnt]=p*t[i],W[cnt]=p*w[i];
			c[i]-=p;
			p<<=1;
		}
		if(c[i]) T[++cnt]=c[i]*t[i],W[cnt]=c[i]*w[i];
	}
	for(int i=1;i<=cnt;i++) 
		for(int j=m;j>=T[i];j--) f[j]=max(f[j],f[j-T[i]]+W[i]);
	ans=0;
	for(int i=0;i<=m;i++) ans=max(ans,f[i]);
	write(ans);
	return 0;
}
